python基础第九节

9.1 while循环

在程序中,循环功能和if条件判断一样,是程序最核心的逻辑功能。
用于在条件为真时重复执行一段代码块.
while循环的基本语法:

while 条件:
    条件满足时,做的事情1
    条件满足时,做的事情2
    pass

注意:
1. 当条件的运算结果为True的时候, 会运行while代码块下的代码.
2. 若while后的条件一直为True, 则会一直循环运行while代码块下的代码.
3. 若为False, 则表示结束循环;所以需要设置循环终止的条件,否则将进入无限循环.

i = 1
string = 'hello world' # 现在需要打印100次
while i <=100:
    print(f'{string}-{i}')
    i += 1

案例1:

*
**
***
****
*****
******
*******
********
*********
**********
# 打印这样的一个高为10的直角三角形.
i = 1
while i <= 10:
    print('*' * i)
    i += 1

案例2: 求1-100的累加和.


i = 0
sum = 0
while i < 100:
    sum += i+1
    i += 1
print(sum)

# ---------------------

i = 1
sum = 0
while i <= 100:
    sum += i
    i += 1
print(sum)

案例3: 整数反转 12345 54321

# 案例3: 整数反转 12345  54321

num = 12345
str_num = str(num)

ver_num = int-1]
print(ver_num)


# 使用while 来做:
str_num = '12345'
str_count = len(str_num)
ver_num = ""

i = 0
while i < len(str_num):
    ver_num += str_num[len(str_num)- i - 1]
    i += 1

# 直接用str_count做计次器
ver_num = ""
str_count = len(str_num)
while str_count > 0:
    ver_num += str_num[str_count-1]
    str_count -= 1
print(ver_num)

9.2 while循环的嵌套

当我们需要在while循环内执行另一个循环时,我们可以使用while循环嵌套的形式
while循环嵌套的基本语法

while 条件1:
    条件1满足时,做的事情1
    条件1满足时,做的事情2
    pass
    while 条件2:
        条件2满足时,做的事情1
    	条件2满足时,做的事情2
    	pass
# 第一个while循环将重复执行内部代码块,直到条件1不再满足为止。在内部代码块中,我们有另一个while循环,它将重复执行内部代码块,直到条件2不再满足为止。这种嵌套的循环结构可以用于处理许多问题.

# 需要注意的是,在使用嵌套循环时,我们需要仔细考虑内部和外部循环之间的交互,以确保程序能够正确地执行。另外,需要注意的是,循环嵌套可能会导致程序的执行速度变慢,因此我们应该尽可能地避免不必要的循环嵌套.

案例1: 打印99乘法表

1x1=1	
1x2=2	2x2=4	
1x3=3	2x3=6	3x3=9	
1x4=4	2x4=8	3x4=12	4x4=16	
1x5=5	2x5=10	3x5=15	4x5=20	5x5=25	
1x6=6	2x6=12	3x6=18	4x6=24	5x6=30	6x6=36	
1x7=7	2x7=14	3x7=21	4x7=28	5x7=35	6x7=42	7x7=49	
1x8=8	2x8=16	3x8=24	4x8=32	5x8=40	6x8=48	7x8=56	8x8=64	
1x9=9	2x9=18	3x9=27	4x9=36	5x9=45	6x9=54	7x9=63	8x9=72	9x9=81
# 解:
    # 关键在于寻找内部循环和外部循环

# xr 1 - 9 对应行数
xr = 1 
while xr <=9:
    # xl 1 - 9 
    xl = 1
    while xl <= xr: 
        print(f"{xl}x{xr} = {xl*xr}",end='\t')
        xl += 1
    xr += 1
    print('')

# 有一个彩票中奖号码是0-999. 千分之一的概率.
# 有一个人第一天买一注, 第二天买2注, 第三天买3注..... 彩票号码都是随机购买.
# 写一个程序来模拟这个人买彩票的过程, 一直记录到中奖为止.
# 购买一注彩票2元, 奖金1000元, 输出此人买彩票盈亏多少.

"""
1  1
2  1  2
3  1   2   3
4  1   2   3  4
必须先要知道他买了多少注彩票.
"""
import random


# 天数: n

# 中奖号码 x
x = random.randint(0,999)


# 循环号码 i


# 若每天彩票中奖号码不一致



day = 1
sign = False
total = 0

while sign == False:

    luck_num = random.randint(0,999)
    print(f'第{day}天开奖号码: {luck_num}')
    print(f"第{day}天,我买了{c}注")
    c = 1

    while c <= day:
        
        x_num = random.randint(0,999)

        if x_num == luck_num:
            print(f"第{day}天, 第{c}注中奖了, 中奖号码是{x_num}")
            c = day      # 一旦中奖, 跳出小循环
            sign = True  # 一旦中奖, 跳出大循环
            total += 1 # 中奖注数
        else:
            total += 1 # 未中奖注数

        c += 1
    
    day += 1



money = 1000 - total*2

print(f'盈亏:{money}')

# 若每天彩票中奖号码一致


# n = 1


# while x not in u:
#     u = []
#     c = 1
#     while c <= n:
#         i = random.randint(0,999) # 中奖号码
#         u.append(i)
#         c += 1
#     n += 1
#     print(x,u)

# money = 1000 - (1+n)*n/2*2

# print(money)


9.3 作业

"""
1. 编写一个程序, 使用while循环计算1-100内所有偶数的和. (包含1和100)
"""
i = 1
total = 0
while i <= 100:
    
    if i%2 == 0:
        total += i
    i += 1
    
print(total)

2550

"""
2. 编写一个程序求得任意2个正整数的最小公倍数.
"""

num1 = int(input("起输入第2个整数"))
num2 = int(input("起输入第2个整数"))

i = max(num1,num2)
while not (i%num1 == 0 and i % num2 == 0):
    i += 1
print(f"最小公倍数为:{i}")

最小公倍数为:10

"""
3. 将前一节课中的猜幸运数字的题, 优化为: 猜1-100之间的数, 可以猜任意次, 但是在用户猜错了的时候,
    程序会给出”猜大了”或是”猜小了”的提示, 直到用户猜中为止.


前一节课题目:
3. 有一个1-10之间的幸运数字, 用户有3次机会去猜这个幸运数字, 3次以内猜中, 则获得7折折扣, 3次猜不中, 则输出”很遗憾, 您没有猜中.”
"""

luck_num = random.randint(1,100) # 30 
guess_num = random.randint(1,100)  # 50 


sign = True
n = 1
minus = 1
maxim = 100
while sign:
    if guess_num == luck_num:
        print(f'恭喜,第{n}次你猜中了幸运数字{guess_num}')
        sign = False
    elif guess_num > luck_num: 
        print(f'第{n}次猜测{guess_num},猜大了')  
        maxim = guess_num
        guess_num = random.randint(minus,maxim) 
    else:
        print(f'第{n}次猜测{guess_num},猜小了')  
        minus = guess_num
        guess_num = random.randint(minus,maxim) 
    n += 1
    

# 另一个写法: python 3.8以后加入的语法, 不用sign来跳出

luck_num = random.randint(1,100) # 30 
guess_num = random.randint(1,100)  # 50 


sign = True
n = 1
minus = 1
maxim = 100
while (guess_num:=random.randint(minus,maxim)) != luck_num:
    if guess_num == luck_num:
        print(f'恭喜,第{n}次你猜中了幸运数字{guess_num}')
        sign = False
    elif guess_num > luck_num: 
        print(f'第{n}次猜测{guess_num},猜大了')  
        maxim = guess_num
    else:
        print(f'第{n}次猜测{guess_num},猜小了')  
        minus = guess_num
    n += 1
    

第1次猜测25,猜大了
第2次猜测1,猜小了
第3次猜测24,猜大了
第4次猜测16,猜大了
第5次猜测11,猜大了
第6次猜测6,猜大了
恭喜,第7次你猜中了幸运数字5

luck_num = random.randint(1,100) # 30 
guess_num = random.randint(1,100)  # 50 


sign = True
n = 1
minus = 1
maxim = 100
while (guess_num:=random.randint(minus,maxim)) != luck_num:
    if guess_num > luck_num: 
        print(f'第{n}次猜测{guess_num},猜大了')  
        maxim = guess_num
    else:
        print(f'第{n}次猜测{guess_num},猜小了')  
        minus = guess_num
    n += 1
# if guess_num == luck_num:
print(f'恭喜,第{n}次你猜中了幸运数字{guess_num}')
sign = False

第1次猜测70,猜大了
第2次猜测12,猜小了
第3次猜测33,猜小了
第4次猜测50,猜大了
第5次猜测44,猜大了
第6次猜测35,猜小了
第7次猜测42,猜大了
第8次猜测38,猜小了
恭喜,第9次你猜中了幸运数字39

Relative Article

python 语句